/*******************************************************************************
 *
 * File:        SYSMAN.c
 * Progetto:    Robottino
 * Ambiente:    PIC32
 * Data:        14/03/2012
 * Autore:      M. Tili
 * Versione:    00.02
 *
 * Descrizione: 
 *   Modulo di schedulazione delle attivita' che deve eseguire il 
 *   microcontrollore.
 *
 * Modifica:  15/03/2012  | M.Tili
 *                        | Inserita chiamata a TimerInit in main.
 * Modifica:  15/03/2012  | M.Tili
 *                        | Inserita condizione se fatalError interrompi loop.
 *
 */
#include "CONFIG.h"
#include "TYPEDEFS.h"
#include "GLOBVAR.h"
#include "PIC32SKLIB.h"
#include "KEYMAN.h"
#include "LEDMAN.h"
#include "TIMER.h"
#include "SYSMAN.h"







/*******************************************************************************
 *
 *  main
 *  Descrizione: Schedulatore delle attivita': legge gli ingressi, elabora
 *               le informazioni e applica le uscite.
 *
 */
int main(void)
{
  INT32U         maxNumLoop;                  /*------------------*/
  BOOLEAN        isLoopInfinite;              /* See CONFIG.h for */
  maxNumLoop     = CFG_SYSMAN_MAX_NUM_LOOP;   /* these 2 vars     */
  isLoopInfinite = CFG_SYSMAN_INFINITE_LOOP;  /*------------------*/

  Pic32Init();                         /* Init low level sw       */
  GlobvarInit();                       /* Init global variables   */
  TimerInit();                         /* Init gestione timer     */
  KeyManInit();                        /* Init gestione tasti     */
  LedManInit();                        /* Init gestione led       */


  while( (fatalError == ERR_FATAL_NONE) && 
         ((isLoopInfinite == TRUE) || (maxNumLoop != 0)) )
  {
    maxNumLoop--;
    Pic32RunInput();                   /* Aggiorno gli input      */
    KeyManUpdate();                    /* Elab input da KEY       */
    LedManUpdate();                    /* Calcolo ed elaborazione */
    TimerUpdateAll();                  /* Aggiorn. dei timer      */
    Pic32RunOutput();                  /* Applico gli output      */
    Pic32DelayMs(CFG_SYSMAN_DELAY_MS); /* Pausa                   */
  }

  if (fatalError != ERR_FATAL_NONE)
  {
    Pic32SafeState(fatalError);
  }

  return 0;
}
